/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dao;

import dominio.Certificado;
import java.util.Collection;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.swing.JOptionPane;

/**
 *
 * @author eagle
 */
public class CertificadoDao  {


    private EntityManager em;

   public CertificadoDao(EntityManager em) {
        this.em = em;
    }


   public Certificado crearCertificado(Integer idcertificado, int documento_iddocumento,
           String nombrePer, int cedula, String ciudad, String periodo,
           int nMaterias, int total, String grado) {
        Certificado a = new Certificado(idcertificado,documento_iddocumento, nombrePer,
                cedula, ciudad, periodo, nMaterias, total, grado);
        em.persist(a);//con esta funcion lo guarda en la base de datos
        return a;
    }

    public Certificado encontrarCertificado(Integer idcertificado) {
        return em.find(Certificado.class, idcertificado);// con esta funcion se buscas un dato por primary key, el primer parametro es nuestra clase entidad
    }

    public void borrarCertificado(Integer idcertificado) {
        Certificado a = encontrarCertificado(idcertificado);//en este caso podemos borrar un usuario por nombre
        if (a != null) {//si no lo encuentra por supuesto no lo intenta borrar
         em.remove(a);// borra de la tabla ese registro
            }

    }

    public Certificado actualizarCertificado(Integer idcertificado,
                int documento_iddocumento, String nombrePer, int cedula,
                String ciudad, String periodo, int nMaterias, int total, String grado) {
        Certificado a = em.find(Certificado.class, idcertificado); //se usa el entity manager para encontrarlo luego cuando se llame ActualizarUsuario se hace commit y va a persistir el usuario actualizado
        if (a != null) {
          a.setIdCertificado(idcertificado);
          a.setDoc(documento_iddocumento);
          a.setNombrePer(nombrePer);
          a.setCedula(cedula);
          a.setCiudad(ciudad);
          a.setPeriodo(periodo);
          a.setnMaterias(nMaterias);
          a.settotal(total);
         a.setGrado(grado);
         

        }
        return a;
    }

    public Collection<Certificado> encontrarCertificado() { //encontrar todos los usuarios
        Query query = em.createQuery("SELECT a FROM Certificado a");// Ojo la sentencia está en Java Query Language, no SQL
        return (Collection<Certificado>) query.getResultList(); // me guarda la lista de todos los usuarios en mi coleccion
    }

    public List<Certificado> findAll() {
       Query query = em.createQuery("select object(o) from Certificado as o");
       return (List<Certificado>) query.getResultList(); // me guarda la lista de todos los usuarios en mi coleccion
    }

       public int devolverId() {
        int i = 0;
        Query q = em.createQuery("SELECT a.idcertificado from Certificado a ORDER BY a.idcertificado DESC LIMIT 1");
        if (q.getResultList().isEmpty() == true) {
            return 1;
        }
        else {
            i = (Integer) q.getResultList().get(0);
            return (i+1 );
        }
    }

    public Certificado ActualizarCertificado(Integer idcertificado) {
        em.getTransaction().begin();
        Certificado e = this.encontrarCertificado(idcertificado);
        if (e != null) {
            e.setIdCertificado(idcertificado);
        }
        else {
            JOptionPane.showMessageDialog(null, "Error al actualizar Certificado",
                    null, JOptionPane.ERROR_MESSAGE);
        }
        em.getTransaction().commit();
        return e;
    }

}
